package malagaAcoge.controller.daos;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import malagaAcoge.model.entities.Contactovivienda;
import malagaAcoge.utils.JPAUtils;

public class ContactoViviendaDao {
	private static JPAUtils jpaUtils;
	protected static EntityManager em;

	public ContactoViviendaDao() {
		jpaUtils = new JPAUtils();

	}

	@SuppressWarnings("unchecked")
	public static List<Contactovivienda> findAll() {
		List<Contactovivienda> contactoviviendas = new ArrayList<Contactovivienda>();
		try {
			em = jpaUtils.getEntityManager();
			Query q = em.createQuery("select a from Contactovivienda a");
			contactoviviendas = q.getResultList();
		} catch (Exception e) {
			System.out.println("Error en metodo findAllContactovivienda");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return contactoviviendas;

	}

	public static List<Contactovivienda> findContactoviviendaByName(String query) {
		List<Contactovivienda> contactoviviendas = new ArrayList<Contactovivienda>();
		try {
			em = jpaUtils.getEntityManager();
			Query q = em
					.createQuery(
							"SELECT OBJECT(Contactovivienda) FROM Contactovivienda contactoVivienda WHERE contactoVivienda.nombre like :valor")
					.setParameter("valor", "%"+query+"%");
			contactoviviendas = q.getResultList();
		} catch (Exception e) {
			System.out.println("Error en metodo findAllContactovivienda");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return contactoviviendas;

	}

	public static Contactovivienda findContactovivienda(int id) {
		Contactovivienda contactovivienda = null;
		try {
			em = jpaUtils.getEntityManager();
			contactovivienda = (Contactovivienda) em.find(Contactovivienda.class, id);
		} catch (Exception e) {
			System.out.println("Error en metodo findContactovivienda");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return contactovivienda;

	}

	public static void createContactovivienda(Contactovivienda contactoVivienda) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.persist(contactoVivienda);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo createContactovivienda:");
			e.printStackTrace();
		} finally {
			em.close();
		}

	}

	public static void updateContactovivienda(Contactovivienda contactoVivienda) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.merge(contactoVivienda);
			em.getTransaction().commit();

		} catch (Exception e) {
			System.out.println("Error en metodo updateContactovivienda:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void deleteContactovivienda(int idContactovivienda) {
		try {
			em = jpaUtils.getEntityManager();
			Contactovivienda contactoVivienda = em.find(Contactovivienda.class, idContactovivienda);
			if (contactoVivienda != null) {
				em.getTransaction().begin();
				em.remove(contactoVivienda);
				em.getTransaction().commit();
			}
		} catch (Exception e) {
			System.out.println("Error en metodo deleteContactovivienda:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static Contactovivienda findContactoviviendaByExactName(String nombreContactovivienda) {
		Contactovivienda contactoVivienda = new Contactovivienda();
		try {
			em = jpaUtils.getEntityManager();
			Query q = em
					.createQuery(
							"SELECT OBJECT(Contactovivienda) FROM Contactovivienda contactoVivienda WHERE contactoVivienda.nombre like :valor")
					.setParameter("valor", nombreContactovivienda);
			contactoVivienda = (Contactovivienda) q.getSingleResult();
		} catch (Exception e) {
			System.out.println("Error en metodo findContactoviviendaByExactName");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return contactoVivienda;
	}
}
